home *** CD-ROM | disk | FTP | other *** search
- /*
- IsResident.c von Daniel Balster
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- ISRESIDENT
-
-
- Format: ISRESIDENT <name> [SYSTEM]
-
- Schablone: NAME,SYSTEM/S
-
- Funktion: Es wird überprüft, ob ein Befehl bereits in der Liste
- der residenten Befehle aufgeführt ist.
-
- Pfad: C: (empfolen), oder mittels PATH <mydir> ADD zugänglich
- machen, wobei <mydir> der Pfad zum ISRESIDENT Kommando
- ist.
-
- Übersetzung: dcc IsResident.c -o C:IsResident (DICE, z.B. von AmigaLibDisk491)
-
- Beschreibung:
-
- Mit diesem Befehl wird überprüft, ob der angegebene Name in der Liste der
- residenten Befehle vorhanden ist. Dies kann dazu benutzt werden, um das
- mehrfache laden von einem Befehl in die Liste der residenten Befehle zu
- vermeiden.
-
- Mit dem Merkmal SYSTEM wird nach Befehlen gesucht, die als SYSTEM gekenn-
- zeichnet sind. Dies führt normalerweise immer zu einem positiven Ergebnis,
- könnte sich aber in zukünftigen Betriebsystemversionen ändern.
-
- Rückgabewerte:
-
- 0 (OK) Name ist bereits resident geladen
-
- 5 (WARN) Name ist noch nicht resident geladen
-
- 10 (ERROR) Es wurde kein Argument angegeben.
-
- 20 (FAIL) System Fehler! (kein Speicher, etc.)
-
- Mit ISRESIDENT kann man bequem in Shell-Skripts die Verwaltung von residenten
- Befehlen erledigen.
-
- Beispiele:
-
- 1> ISRESIDENT Shell SYSTEM
- Shell is resident
- 1>
-
- 1> ISRESIDENT qwertzuiop
- qwertzuiop is not resident
- 1>
-
- Beispiel in einer Skipt-Datei:
-
- ISRESIDENT >NIL: dcc ; falls man vorher schon mal dcc geladen
- IF WARN ; hatte, wird jetzt der entsprechende
- resident DiCE:bin/dcc pure add ; Teil übersprungen.
- ENDIF ;
-
- Siehe auch: RESIDENT, SET
- */
-
- #include <exec/exec.h> // Notwendige Includes
- #include <clib/exec_protos.h>
- #include <dos/dos.h>
- #include <clib/dos_protos.h>
-
- // AmigaDOS Versionstring
- UBYTE *Vers[] = "$VER: isresident v1.0\0";
-
- struct Argumente {
- STRPTR Name; // Unsere Befehlsschablone
- BOOL System; // als Feststruktur
- } Ergebnis;
-
- int main (void)
- {
- struct RDArgs *rdargs; // Argumentstruktur
- int erg; // Rückgabewert.
-
- if( rdargs = ReadArgs( "NAME,SYSTEM/S", &Ergebnis, NULL ) )
- {
- if( Ergebnis.Name ) // Wurde ein Name angegeben ?
- {
- Forbid(); // Multitasking ausschalten wegen Systemlistenzugriff
- if( FindSegment( Ergebnis.Name, NULL, Ergebnis.System ) )
- {
- erg = RETURN_OK; // <Name> wurde gefunden
- VPrintf( "%s is resident\n", &Ergebnis.Name );
- } else {
- erg = RETURN_WARN; // <Name> wurde nicht gefunden
- VPrintf( "%s is not resident\n", &Ergebnis.Name );
- }
- Permit(); // Multitasking wieder erlauben
- } else { // Fehlermeldung generieren und Fehlercode setzen
- PrintFault( ERROR_REQUIRED_ARG_MISSING, 0 );
- erg = RETURN_ERROR;
- }
- FreeArgs( rdargs ); // Argumente wieder freigeben
- } else {
- PrintFault( IoErr(), 0 ); // Hier ist ein schwerwiegender Fehler
- erg = RETURN_FAIL; // aufgetreten. Kommt normalerweise NIE vor
- }
- return erg; // Ergebnis zurückliefern
- }
-
-